home *** CD-ROM | disk | FTP | other *** search
/ HyperLib 1997 Winter - Disc 1 / HYPERLIB-1997-Winter-CD1.ISO.7z / HYPERLIB-1997-Winter-CD1.ISO / オンラインウェア / BUS / TMCM Software and Labs.sit / Software for TMCM 7_95 / Files for Lab 10 / Nested Squares next >
Text File  |  1994-05-10  |  2KB  |  59 lines

  1.  
  2. { This program will draw a set of squares nested one inside the
  3.   next.  The user specifies how many squares are to be drawn. 
  4.   A discussion of the design of the program is given in
  5.   Subsection 6.3.2 of "The Most Complex Machine." }
  6.  
  7. DECLARE HowMany   { the number of squares to be drawn,
  8.                     as specified by the user }
  9.  
  10. DECLARE count  { counter, used to keep track of the number of
  11.                  squares drawn so far }
  12.  
  13. DECLARE length  { the length of the side of one of the squares;
  14.                   this is increased after each square is drawn }
  15.  
  16.  
  17. AskUser("How many squares do you want to draw (1 to 10)?", HowMany)
  18.  
  19. { The next two statements set things up for the FIRST square to 
  20.   be drawn;  this square will have its lower-left corner at the
  21.   point (0,0), and the length of its side will be 1 }
  22.  
  23. count := 0   { no squares drawn yet }
  24.  
  25. length := 1  { the length of the side of the first square to be drawn }
  26.  
  27. LOOP
  28.  
  29.    forward(length)  { draw a square }
  30.    turn(90)
  31.    forward(length)
  32.    turn(90)
  33.    forward(length)
  34.    turn(90)
  35.    forward(length)
  36.  
  37.    count := count + 1             { update counter and check if done }
  38.    EXIT IF count = HowMany
  39.  
  40.    { The rest of the loop sets things up for the NEXT square, 
  41.      which will be drawn when the computer returns to the
  42.      beginning of the loop.  The preconditions that are being set
  43.      up here are:
  44.            (1) The value of the variable, length, is equal to the
  45.                side of the square that is to be drawn next;
  46.            (2) The turtle is at the lower left corner of that square;
  47.            (3) The turtle is facing to the right. 
  48.            (4) The pen must be Down.
  49.    }
  50.  
  51.    length := length + 2  { each square is 2 units bigger than the last }
  52.  
  53.    PenUp          { to move turtle without drawing a line, pen must be Up }
  54.    Move(-1,-1)    { move to position of lower left corner of next square }
  55.    PenDown
  56.  
  57.    face(0)  { face right }
  58.  
  59. END LOOP